package design;

import design.future.Data;
import design.future.FutrueData;

import javax.lang.model.SourceVersion;

/**
 * future模式
 * 客户端请求之后，先返回一个应答结果，然后异步的取准备数据，客户端可以先去处理其他事情，当需要最终结果的时候再来
 * 获取，如果此时数据已经准备好，则将真是数据返回，如果此时数据还没有准备好，则阻塞等待
 */
public class Futrue1 {
    public static void main(String[] args) {
        // 模拟客户端发起请求
        Futrue1 futrue1 = new Futrue1();
        FutrueData futrueData = futrue1.handler("UserId");
        System.out.println(" 请求发送成功");
        System.out.println(" 处理其他事情了 ");
        // 获取真实数据
        String result = futrueData.getRealData();
        System.out.println("result = " + result);
    }
    public FutrueData handler(final String param){
        final FutrueData futrueData = new FutrueData();
        // 启动一个新线程，去加载真实数据，传递给这个代理对象
        new Thread(()->{
           futrueData.initRealData(param);
        }).start();
        return futrueData;
    }
}
